#include <iostream>
using namespace std;
// 1. 定义字面量运算符
//       1、标准保留下划线后缀
//       2、参数类型限制：见下表
//    在解析阶段帮你把 5_cm 翻译成 operator"" _cm(123) 再普通不过的函数调用
constexpr int operator"" _cm(unsigned long long cm)
{
    return static_cast<int>(cm * 10);
}
constexpr int operator"" _mm(unsigned long long cm)
{
    return static_cast<int>(cm);
}

int main()
{
    int len_cm = 5_cm;
    int len_mm = 50_mm;
    cout << "5cm实际长度" << len_cm << std::endl;
    cout << "50mm实际长度" << len_mm << std::endl;
    cout << "len_cm == len_mm : " << ((len_cm == len_mm) ? "equel" : "not equel") << endl;
    return 0;
}

// | 字面量类别   | **唯一合法参数类型**                                 | 示例后缀用法     |
// | ------- | -------------------------------------------- | ---------- |
// | **整型**  | `unsigned long long`                         | `123_cm`   |
// | **浮点**  | `long double`                                | `3.14_cm`  |
// | **字符串** | `(const char*, size_t)`                      | `"abc"_cm` |
// | **字符**  | `char` / `char16_t` / `char32_t` / `wchar_t` | `'A'_cm`   |